
# user_app/utils/redis_utils.py
'''
使用 django.conf.settings 的好处：

✅ 遵循 Django 最佳实践
✅ 支持多环境配置
✅ 自动处理默认值和验证
✅ 更好的错误处理
✅ 与 Django 生态系统集成更好
直接导入 settings 文件的问题：

❌ 硬编码配置文件路径
❌ 无法适应不同环境
❌ 绕过了 Django 的配置验证机制
❌ 可能导致循环导入问题
'''
import redis
from django.conf import settings


class RedisClient:
    def __init__(self):
        self.redis_client = redis.StrictRedis(
            host=settings.CACHES['default']['LOCATION'].split('://')[1].split(':')[0],
            port=int(settings.CACHES['default']['LOCATION'].split(':')[2].split('/')[0]),
            db=0,
            decode_responses=True
        )

    def set_access_token(self, jti, exp,user_id):
        """
        将 Access Token 的 jti 存入 Redis，并设置过期时间
        
        使用 hash 结构统一管理 access token
        key: user_access
        field: jti
        value: valid
        """
        #获取当前登录用户的id，然后拼接到jti中

        
        jti = f"{user_id}_{jti}"  # 假设 nickname 是当前用户的昵称
       
        #简单的ex
        return self.redis_client.setex(jti, int(exp), "valid")

    def is_access_token_valid(self, jti):
        """
        return self.redis_client.exists(redis_key)
        """
        return self.redis_client.exists(jti)

    def delete_access_token(self, jti):
        """
        手动删除 Access Token（如用户登出）
        """
        if jti:
            self.redis_client.delete(jti)